package com.zp.self.module.level_4_算法练习.数据结构.String;
import org.junit.Test;

import java.util.ArrayDeque;
import java.util.Deque;

/**
 * @author By ZengPeng
 */
public class 力扣_1047_删除字符串中的所有相邻重复项{
    @Test
    public void main() {
        Solution solution = new 力扣_1047_删除字符串中的所有相邻重复项().new Solution();
        System.out.println(solution);
    }

    /**
     题目：给出由小写字母组成的字符串 S，重复项删除操作会选择两个相邻且相同的字母，并删除它们。
         在 S 上反复执行重复项删除操作，直到无法继续删除。
         在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。

         示例：
         输入："abbaca"
         输出："ca"
         解释：
         例如，在 "abbaca" 中，我们可以删除 "bb" 由于两字母相邻且相同，这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca"，其中又只有 "aa" 可以执行重复项删除操作，所以最后的字符串为 "ca"。


     分析：【P ♥】
        1.栈：记录栈顶元素即可
                --执行耗时:21 ms,击败了69.38% 的Java用户
                --编码耗时:[10分钟以内]

     边界值 & 注意点：
        1.
     **/
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public String removeDuplicates(String s) {
        Deque<Character> deque =new ArrayDeque<>();
        char[] chars = s.toCharArray();
        for (char aChar : chars) {
            Character peek = deque.peekLast();
            if(peek==null){
                deque.add(aChar);
            }else if(peek==aChar){
                deque.pollLast();
            }else {
                deque.add(aChar);
            }
        }
        StringBuilder stringBuilder = new StringBuilder();
        for (Character character : deque) {
            stringBuilder.append(character);
        }
        return stringBuilder.toString();
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}